//:C13:PlacementOperatorNew.cpp
// Placement with operator new()
#include <cstddef>    // Size_t
#include <iostream>
using namespace std;

class X
{
    int i;
    public:
        X(int ii = 0) : i(ii)
        { 
            cout << "this = " << this << endl;
        }
        ~X()
        {
            cout << "X::~X(): " << this << endl;
        }
        void * operator new(size_t, void * loc)
        {
            return loc;
        }
};

int main(void)
{
    int l[10];
    cout << "l = " << l << endl;
    X *xp = new(l) X(47);    // X at location l
    xp->X::~X();    // Exception destructor call                             
    // ONLY use with placement!
}

